package cn.lg.soar.system.general.service;

import cn.lg.soar.core.util.InnerSerializeUtils;
import cn.lg.soar.database.base.service.IBaseService;
import cn.lg.soar.system.general.entity.SysConfig;

import java.util.Map;

/**
 * 系统配置
 * @author luguoxiang
 * @since 2023-07-13
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface ISysConfigService extends IBaseService<SysConfig> {

    boolean set(String code, String value);

    /**
     * 获取系统配置
     * @param code
     * @return
     */
    String get(String code);

    /**
     * 获取并使用默认值
     * @param code
     * @return
     */
    default String get(String code, String defaultValue) {
        String v = get(code);
        return v == null ? defaultValue : v;
    }

    /**
     * 获取多个配置
     * @param codes
     * @return
     */
    Map<String, String> map(String[] codes);

    /**
     * 获取系统配置
     * @param code
     * @param tClass
     * @return
     * @param <T>
     */
    default <T>T get(String code, Class<T> tClass) {
        return InnerSerializeUtils.parseObject(get(code), tClass);
    }

    /**
     * 获取系统配置
     * @param code
     * @param tClass
     * @param defaultValue
     * @return
     * @param <T>
     */
    default <T>T get(String code, Class<T> tClass, T defaultValue) {
        String s = get(code);
        if (s == null) {
            return defaultValue;
        }
        return InnerSerializeUtils.parseObject(s, tClass);
    }

    /**
     * 从本地缓存读取
     * @param code
     * @param tClass
     * @return
     * @param <T>
     */
    <T>T getByLocalCache(String code, Class<T> tClass);

    /**
     * 从本地缓存读取
     * @param code
     * @param tClass
     * @param defaultValue
     * @return
     * @param <T>
     */
    <T>T getByLocalCache(String code, Class<T> tClass, T defaultValue);

}
